package Traductor.Sintactico;

import java.util.ArrayList;


public class Simbolo{
	
	/*David: Anadido en TipoVar nulo para reconocer en Iasig Mem = nulo*/
	public enum TipoVar{natural, entero, real, caracter, booleano, ref, array, puntero, registro, tipo, proc, nulo};
	public enum Clase{tipo, var, pvar, proc};
	//var: parametro por valor
	//pvar: parametro por variable
	
	public final static int ERROR = -1;
	public final static int natural = 0;
	public final static int entero = 1;
	public final static int real = 2;
	public final static int booleano = 3;
	public final static int caracter = 4;
	public final static int NUMERO_GENERAL = 6; //Entero, Natural o Real

	// Atributos: var y pvar estan aqui falta variable.
    private int nivel;
    private String id;
    private Clase clase;
    private ArrayList<Propiedades> props;

    
	public Simbolo(int nivel, String id, Clase clase){
		this.nivel = nivel;
		this.id = id;
		this.clase = clase;
		this.props = new ArrayList<Propiedades>();
	}
	  
	public void addPropiedad(Propiedades prop){
		props.add(prop);
	}

	public ArrayList<Propiedades> getPropiedades(){
		return props;
	}

	public Propiedades getPropiedad(){
		return props.get(props.size()-1);
	}

	public Propiedades getPropiedad(int pos){
		return props.get(pos);
	}

	public int getTam(){
		int tam;
		int pos = props.size()-1;
		while(pos>=0){
			tam = props.get(pos).getTam();
			if(tam>0) return tam;
			pos--;
		}
		return 0;
	}

	public int getNivel() {
		return nivel;
	}
	
	public void setNivel(int n) {
		this.nivel = n;
	}

	public String getId() {
		return id;
	}

	public Clase getClase() {
		return clase;
	}
	
	public int getNumProp() {
		return props.size();
	}

	public ArrayList<Propiedades> getSubpropiedades(int pos) {
		ArrayList<Propiedades> aux = new ArrayList<Propiedades>();
		for(int i=0; i<=pos; i++)
			aux.add(props.get(i));
		return aux;
	}
	


}
